Fast Direct Solvers for Elliptic PDEs